import ComponentBase from "./ComponentBase";
import Message, { MessageType } from "./Message";
import ManagerCenter from "./MessageCenter";

export default class Manager extends ComponentBase {
    // 管理的消息接收者数组
    receiveList: Array<ComponentBase> = [];
    // 当前管理类接收的具体消息类型
    messageType: number;

    // 设置当前管理类的消息类型
    setManagerType() {
        return MessageType.Type_UI;
    }

    protected onLoad(): void {
        // 设置当前管理类接收的消息类型
        this.messageType = this.setManagerType();
        // 把管理类添加到消息中心列表中
        ManagerCenter.Managers.push(this);
        
    }

    // 接收消息
    ReceiveMsg(message: Message) {
        // 调用父类的方法 
        super.ReceiveMsg(message);
        // 判断消息类型  如果不是manager的类型，就阻断
        if (message.Type != this.messageType) {
            return ;
        }
        
        // 向下层分发消息
        for(let cb of this.receiveList) {
            cb.ReceiveMsg(message);
        }
    }

    // 注册消息监听
    RegisterReceiver(cb: ComponentBase) {
        this.receiveList.push(cb);
    }
}

class EnemyManager extends Manager {
    setManagerType(): number {
        return MessageType.Type_Enemy;
    }
}